home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / dev / c / AmiVoGL_MDEV.lha / drivers / ibmpc / mouse.asm < prev    next >
Assembly Source File  |  1991-07-18  |  3KB  |  157 lines

  1.  
  2. MOUSE_TEXT    SEGMENT  BYTE PUBLIC 'CODE'
  3. MOUSE_TEXT    ENDS
  4. MOUSE_DATA    SEGMENT  WORD PUBLIC 'DATA'
  5. MOUSE_DATA    ENDS
  6. CONST    SEGMENT  WORD PUBLIC 'CONST'
  7. CONST    ENDS
  8. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  9. _BSS    ENDS
  10. DGROUP    GROUP    CONST,    _BSS,    MOUSE_DATA
  11.     ASSUME  CS: MOUSE_TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
  12.  
  13. MOUSE_TEXT      SEGMENT
  14. public    _ismouse, _showmouse, _unshowmouse, _readmouse, _set_loc
  15.  
  16. ;
  17. ; The Microsoft mouse manual says that you should bung a 5 at location
  18. ; 40h:49h (Ie. The spot that says what mode we're in) for the mouse to work
  19. ; on a HERCULES Card.
  20. ;
  21. _set_loc   proc    far
  22.     push    bp
  23.     mov    bp, sp
  24.         push    si
  25.         push    di
  26.     push    bx
  27.  
  28.         mov     bx,40h
  29.         mov     es,bx
  30.         mov     bx,49h
  31.         mov     si,bx
  32.     mov    ah,es:[si]
  33.         mov     ah, byte ptr [bp + 6]
  34.         mov     byte ptr es:[si],ah            ; Bung something there
  35.  
  36.     mov    ax, [bp + 6]
  37.     pop     bx
  38.         pop     di
  39.         pop     si
  40.         mov     sp, bp
  41.         pop     bp
  42.  
  43.         ret
  44. _set_loc   endp
  45.  
  46. ;
  47. ; Check if the mouse driver is present, if it is, then set
  48. ; the x and y limits for it.
  49. ;
  50. _ismouse        proc far
  51.         push    bp
  52.         push    es
  53.         mov     bp,sp
  54.  
  55.         mov     ax,03533h       ;Get int 33h by calling int 21
  56.         int     21
  57.         mov     ax,es           ;Check segment, offset of int 33
  58.         or      ax,bx           ;vector. If 0 or pointing to IRET
  59.         jnz     yesdrv          ;then driver not installed.
  60.         mov     bl, es:[bx]
  61.         cmp     bl,0cfh
  62.         jne     yesdrv
  63.  
  64.         mov     ax,0            ; return 0 (false) if no driver
  65.         jmp     pissoff
  66.  
  67. yesdrv: 
  68.         mov     ax,0            ; Initialize mouse
  69.         int     33h
  70.         cmp     ax,0            ; Is mouse installed 
  71.         jz      pissoff         ; pissoff if not installed
  72.  
  73.     mov    ax,7        ;Function 7, set x limits
  74.     mov    cx,0        
  75.     mov    dx,[bp+6]
  76.     int    33h
  77.     mov    ax,8        ;Function 8, set y limits
  78.     mov    cx,0            
  79.     mov    dx,[bp+8]    
  80.     int    33h
  81.         mov     ax,1            ; return 1 (true) if driver installed
  82.  
  83. pissoff:                        ; pissoff back to caller.
  84.         mov     sp,bp
  85.         pop     es
  86.         pop     bp
  87.         ret     
  88.  
  89. _ismouse        endp
  90.  
  91. ;
  92. ; Turns the mouse cursor on
  93. ;
  94. _showmouse    proc far
  95.         push    bp
  96.         mov     bp,sp
  97.     mov    ax,1
  98.     int     33h
  99.     mov    sp,bp
  100.     pop    bp
  101.     ret
  102. _showmouse    endp
  103.  
  104. ;
  105. ; Turns the mouse cursor off
  106. ;
  107. _unshowmouse    proc far
  108.         push    bp
  109.         mov     bp,sp
  110.     mov    ax,2
  111.     int     33h
  112.     mov    sp,bp
  113.     pop    bp
  114.     ret
  115. _unshowmouse    endp
  116.  
  117. ;
  118. ;    readmouse(xmouse, ymouse)
  119. ;
  120. _readmouse      proc far
  121.         push    bp
  122.         mov     bp,sp
  123.     push    di
  124.     push    bx
  125.     push    cx
  126.     push    dx
  127. ;
  128. ;    Get mouse status.
  129. ;
  130.     mov     ax,3
  131.     int     33h
  132.     
  133.         mov    ax,bx                 ; return buttons 
  134.  
  135. ;       mov     di,[bp+4]            ;x  <= this is for small mem model
  136. ;        mov     word ptr [di],cx
  137. ;        mov     di,[bp+6]            ;y
  138. ;        mov     word ptr [di],dx
  139.  
  140.     les    di,[bp+6]        ; <= this is for large mem model
  141.     mov    word ptr es:[di],cx        ;x
  142.     les    di,[bp+10]
  143.     mov    word ptr es:[di],dx        ;y
  144.  
  145.     pop    dx
  146.     pop    cx
  147.     pop    bx
  148.     pop    di
  149.         mov     sp,bp
  150.         pop     bp
  151.         ret     
  152.  
  153. _readmouse      endp
  154.  
  155. MOUSE_TEXT    ENDS
  156. END
  157.